Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Node / ReticulumProjects / MeshChatX.git / files / .github / workflows / android-apk-tag.yml

Displaying Raw • Download


.github/workflows/android-apk-tag.yml 495de05eb27291262439a8a47cd7942863f83b65 (495de05e) Text, 13.56 KB

T8b949e# Android APK build for Git tags only. Invoked from build-release.yml so APKs ship in the
T8b949e# same workflow run and draft release as Linux/desktop/Flatpak (immutable per tag).
T8b949e#
T8b949e# Pinned first-party actions (keep in sync with android-build.yml):
T8b949e# actions/checkout@v6.0.1 8e8c483db84b4bee98b60c0593521ed34d9990e8
T8b949e# actions/setup-python@v6.2.0 a309ff8b426b58ec0e2a45f0f869d46889d02405
T8b949e# actions/setup-java@v4.7.1 c5195efecf7bdfc987ee8bae7a71cb8b11521c00
T8b949e# actions/upload-artifact@v5.0.0 330a01c490aca151604b8cf639adc76d48f6c5d4
T8b949e# actions/download-artifact@v5.0.0 634f93cb2916e3fdff6788551b99b062d0335ce0

Tff7b72nameTb4b4b4: Ta5d6ffAndroidTa5d6ff Ta5d6ffAPKTa5d6ff Ta5d6ff(tag)

Tff7b72onTb4b4b4:
Tff7b72workflow_callTb4b4b4:
Tff7b72inputsTb4b4b4:
Tff7b72frontend_artifact_nameTb4b4b4:
Tff7b72descriptionTb4b4b4: Ta5d6ffNameTa5d6ff Ta5d6ffofTa5d6ff Ta5d6fftheTa5d6ff Ta5d6fffrontendTa5d6ff Ta5d6ffartifactTa5d6ff Ta5d6fffromTa5d6ff Ta5d6fffrontend-buildTa5d6ff Ta5d6ff(PythonTa5d6ff Ta5d6ff3.11).
Tff7b72requiredTb4b4b4: Ta5d6fftrue
Tff7b72typeTb4b4b4: Ta5d6ffstring
Tff7b72run_unit_testsTb4b4b4:
Tff7b72descriptionTb4b4b4: Ta5d6ffRunTa5d6ff Ta5d6ffGradleTa5d6ff Ta5d6ffunitTa5d6ff Ta5d6fftestsTa5d6ff Ta5d6ffandTa5d6ff Ta5d6fflint.
Tff7b72requiredTb4b4b4: Ta5d6fffalse
Tff7b72typeTb4b4b4: Ta5d6ffboolean
Tff7b72defaultTb4b4b4: Ta5d6fftrue

Tff7b72permissionsTb4b4b4:
Tff7b72contentsTb4b4b4: Ta5d6ffread
Tff7b72actionsTb4b4b4: Ta5d6ffwrite

Tff7b72envTb4b4b4:
Tff7b72FORCE_JAVASCRIPT_ACTIONS_TO_NODE24Tb4b4b4: Ta5d6fftrue
Tff7b72NODE_OPTIONSTb4b4b4: Ta5d6ff--max-old-space-size=8192
Tff7b72NODE_VERSIONTb4b4b4: Ta5d6ff"Ta5d6ff24Ta5d6ff"
Tff7b72PNPM_VERSIONTb4b4b4: Ta5d6ff"Ta5d6ff10.33.0Ta5d6ff"
Tff7b72PYTHON_VERSIONTb4b4b4: Ta5d6ff"Ta5d6ff3.11Ta5d6ff"
Tff7b72JAVA_VERSIONTb4b4b4: Ta5d6ff"Ta5d6ff17Ta5d6ff"
Tff7b72CHAQUOPY_REFTb4b4b4: Ta5d6ff"Ta5d6ff9f563f45108a873d7feb363e1f754c0173f1114eTa5d6ff"

Tff7b72jobsTb4b4b4:
Tff7b72androidTb4b4b4:
Tff7b72nameTb4b4b4: Ta5d6ffAndroidTa5d6ff Ta5d6ffAPKTa5d6ff Ta5d6ff(tag)
Tff7b72runs-onTb4b4b4: Ta5d6ffubuntu-latest
Tff7b72timeout-minutesTb4b4b4: Ta5d6ff90
Tff7b72defaultsTb4b4b4:
Tff7b72runTb4b4b4:
Tff7b72shellTb4b4b4: Ta5d6ffbash
Tff7b72envTb4b4b4:
Tff7b72FRONTEND_ARTIFACT_NAMETb4b4b4: Ta5d6ff${{Ta5d6ff Ta5d6ffinputs.frontend_artifact_nameTa5d6ff Ta5d6ff}}
Tff7b72stepsTb4b4b4:
Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffCheckout
Tff7b72usesTb4b4b4: Ta5d6ffactions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8
Tff7b72withTb4b4b4:
Tff7b72fetch-depthTb4b4b4: Ta5d6ff0

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffResolveTa5d6ff Ta5d6fftagTa5d6ff Ta5d6ffreleaseTa5d6ff Ta5d6fftrack
Tff7b72idTb4b4b4: Ta5d6fftrack
Tff7b72runTb4b4b4: Tb4b4b4|
Tff7b72set -euo pipefail
Tff7b72git fetch --no-tags origin dev master
Tff7b72sha="$(git rev-parse HEAD)"
Tff7b72on_m=false
Tff7b72on_d=false
Tff7b72while IFS= read -r line; do
Tff7b72ref="$(printf '%s' "$line" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')"
Tff7b72case "$ref" in
Tff7b72origin/master) on_m=true ;;
Tff7b72origin/dev) on_d=true ;;
Tff7b72esac
Tff7b72done < <(git branch -r --contains "${sha}")
Tff7b72if [[ "${on_m}" == true ]]; then
Tff7b72track=master
Tff7b72elif [[ "${on_d}" == true ]]; then
Tff7b72track=dev
Tff7b72else
Tff7b72track=none
Tff7b72fi
Tff7b72echo "track=${track}" >> "${GITHUB_OUTPUT}"
Tff7b72echo "Resolved tag ${GITHUB_REF_NAME} -> track=${track}"

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffDetectTa5d6ff Ta5d6ffAndroidTa5d6ff Ta5d6ffreleaseTa5d6ff Ta5d6ffsigningTa5d6ff Ta5d6ffsecrets
Tff7b72idTb4b4b4: Ta5d6ffandroid_signing
Tff7b72envTb4b4b4:
Tff7b72KS_B64Tb4b4b4: Ta5d6ff${{Ta5d6ff Ta5d6ffsecrets.ANDROID_SIGNING_KEYSTORE_BASE64Ta5d6ff Ta5d6ff}}
Tff7b72KS_PASSTb4b4b4: Ta5d6ff${{Ta5d6ff Ta5d6ffsecrets.ANDROID_SIGNING_KEYSTORE_PASSWORDTa5d6ff Ta5d6ff}}
Tff7b72KS_ALIASTb4b4b4: Ta5d6ff${{Ta5d6ff Ta5d6ffsecrets.ANDROID_SIGNING_KEY_ALIASTa5d6ff Ta5d6ff}}
Tff7b72runTb4b4b4: Tb4b4b4|
Tff7b72set -euo pipefail
Tff7b72if [[ -n "${KS_B64}" && -n "${KS_PASS}" && -n "${KS_ALIAS}" ]]; then
Tff7b72echo "ready=true" >> "${GITHUB_OUTPUT}"
Tff7b72else
Tff7b72echo "ready=false" >> "${GITHUB_OUTPUT}"
Tff7b72fi

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffRequireTa5d6ff Ta5d6ffsigningTa5d6ff Ta5d6ffsecretsTa5d6ff Ta5d6ffforTa5d6ff Ta5d6ffmasterTa5d6ff Ta5d6ffreleaseTa5d6ff Ta5d6fftags
Tff7b72ifTb4b4b4: Ta5d6ff${{Ta5d6ff Ta5d6ffsteps.track.outputs.trackTa5d6ff Ta5d6ff==Ta5d6ff Ta5d6ff'master'Ta5d6ff Ta5d6ff&&Ta5d6ff Ta5d6ffsteps.android_signing.outputs.readyTa5d6ff Ta5d6ff!=Ta5d6ff Ta5d6ff'true'Ta5d6ff Ta5d6ff}}
Tff7b72runTb4b4b4: Tb4b4b4|
Tff7b72echo "::error::Tagged master build needs release signing. Set secrets ANDROID_SIGNING_KEYSTORE_BASE64, ANDROID_SIGNING_KEYSTORE_PASSWORD, and ANDROID_SIGNING_KEY_ALIAS (see android-build.yml header)."
Tff7b72exit 1

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffSetTa5d6ff Ta5d6ffupTa5d6ff Ta5d6ffJava
Tff7b72usesTb4b4b4: Ta5d6ffactions/setup-java@c5195efecf7bdfc987ee8bae7a71cb8b11521c00
Tff7b72withTb4b4b4:
Tff7b72distributionTb4b4b4: Ta5d6fftemurin
Tff7b72java-versionTb4b4b4: Ta5d6ff${{Ta5d6ff Ta5d6ffenv.JAVA_VERSIONTa5d6ff Ta5d6ff}}
Tff7b72cacheTb4b4b4: Ta5d6ffgradle
Tff7b72cache-dependency-pathTb4b4b4: Tb4b4b4|
Tff7b72android/build.gradle
Tff7b72android/settings.gradle
Tff7b72android/app/build.gradle

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffSetTa5d6ff Ta5d6ffupTa5d6ff Ta5d6ffPython
Tff7b72usesTb4b4b4: Ta5d6ffactions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405
Tff7b72withTb4b4b4:
Tff7b72python-versionTb4b4b4: Ta5d6ff${{Ta5d6ff Ta5d6ffenv.PYTHON_VERSIONTa5d6ff Ta5d6ff}}

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffDownloadTa5d6ff Ta5d6fffrontendTa5d6ff Ta5d6ffartifact
Tff7b72usesTb4b4b4: Ta5d6ffactions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0
Tff7b72withTb4b4b4:
Tff7b72nameTb4b4b4: Ta5d6ff${{Ta5d6ff Ta5d6ffenv.FRONTEND_ARTIFACT_NAMETa5d6ff Ta5d6ff}}
Tff7b72pathTb4b4b4: Ta5d6ffmeshchatx/public

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffVerifyTa5d6ff Ta5d6fffrontendTa5d6ff Ta5d6ffartifactTa5d6ff Ta5d6ffcontents
Tff7b72runTb4b4b4: Tb4b4b4|
Tff7b72set -euo pipefail
Tff7b72test -f meshchatx/public/index.html
Tff7b72test -d meshchatx/public/assets
Tff7b72test -d meshchatx/public/reticulum-docs-bundled/current

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffInstallTa5d6ff Ta5d6ffAndroidTa5d6ff Ta5d6ffwheelTa5d6ff Ta5d6ffbuildTa5d6ff Ta5d6ffdependencies
Tff7b72runTb4b4b4: Tb4b4b4|
Tff7b72sudo apt-get update
Tff7b72sudo apt-get install -y build-essential cmake pkg-config patchelf

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffInstallTa5d6ff Ta5d6ffRustTa5d6ff Ta5d6fftoolchain
Tff7b72runTb4b4b4: Tb4b4b4|
Tff7b72curl -sSfL https://sh.rustup.rs -o rustup-init.sh
Tff7b72chmod +x rustup-init.sh
Tff7b72./rustup-init.sh -y --profile minimal --default-toolchain stable
Tff7b72echo "$HOME/.cargo/bin" >> "$GITHUB_PATH"

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffInstallTa5d6ff Ta5d6ffAndroidTa5d6ff Ta5d6ffNDKTa5d6ff Ta5d6ffforTa5d6ff Ta5d6ffChaquopyTa5d6ff Ta5d6ffnativeTa5d6ff Ta5d6ffwheels
Tff7b72runTb4b4b4: Tb4b4b4|
Tff7b72set -euo pipefail
Tff7b72SDK_ROOT="${ANDROID_SDK_ROOT:-${ANDROID_HOME:-/usr/local/lib/android/sdk}}"
Tff7b72SDKMANAGER="${SDK_ROOT}/cmdline-tools/latest/bin/sdkmanager"
Tff7b72if [[ ! -x "${SDKMANAGER}" ]]; then
Tff7b72echo "Expected preinstalled sdkmanager at ${SDKMANAGER}" >&2
Tff7b72exit 1
Tff7b72fi
Tff7b72NDK_VERSION="27.3.13750724"
Tff7b72yes_n() { for _ in $(seq 1 "$1"); do echo y; done; }
Tff7b72if [[ ! -d "${SDK_ROOT}/ndk/${NDK_VERSION}" ]]; then
Tff7b72yes_n 200 | "${SDKMANAGER}" --sdk_root="${SDK_ROOT}" --licenses >/dev/null
Tff7b72yes_n 50 | "${SDKMANAGER}" --sdk_root="${SDK_ROOT}" "ndk;${NDK_VERSION}" >/dev/null
Tff7b72fi
Tff7b72{
Tff7b72echo "ANDROID_HOME=${SDK_ROOT}"
Tff7b72echo "ANDROID_SDK_ROOT=${SDK_ROOT}"
Tff7b72} >> "${GITHUB_ENV}"

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffBuildTa5d6ff Ta5d6ffAndroidTa5d6ff Ta5d6ffwheels
Tff7b72runTb4b4b4: Ta5d6ffbashTa5d6ff Ta5d6ffscripts/build-android-wheels-local.shTa5d6ff Ta5d6ff--python-minorTa5d6ff Ta5d6ff"${PYTHON_VERSION}"Ta5d6ff Ta5d6ff--chaquopy-refTa5d6ff Ta5d6ff"${CHAQUOPY_REF}"Ta5d6ff Ta5d6ff--abisTa5d6ff Ta5d6ffarm64-v8a,x86_64,armeabi-v7a

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffBuildTa5d6ff Ta5d6ffMeshChatXTa5d6ff Ta5d6ffwheelTa5d6ff Ta5d6ffforTa5d6ff Ta5d6ffrepositoryTa5d6ff Ta5d6ffbundle
Tff7b72runTb4b4b4: Tb4b4b4|
Tff7b72set -euo pipefail
Tff7b72python -m pip install -U pip build
Tff7b72python -m build --wheel -o dist .

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffVerifyTa5d6ff Ta5d6ffrequiredTa5d6ff Ta5d6ffAndroidTa5d6ff Ta5d6ffwheelsTa5d6ff Ta5d6ffareTa5d6ff Ta5d6ffpresent
Tff7b72runTb4b4b4: Tb4b4b4|
Tff7b72set -euo pipefail
Tff7b72required=(
Tff7b72"miniaudio-1.70-*-cp311-cp311-android_24_arm64_v8a.whl"
Tff7b72"miniaudio-1.70-*-cp311-cp311-android_24_x86_64.whl"
Tff7b72"miniaudio-1.70-*-cp311-cp311-android_24_armeabi_v7a.whl"
Tff7b72"pycodec2-*-cp311-cp311-android_24_arm64_v8a.whl"
Tff7b72"pycodec2-*-cp311-cp311-android_24_x86_64.whl"
Tff7b72"pycodec2-*-cp311-cp311-android_24_armeabi_v7a.whl"
Tff7b72"lxst-*-py3-none-any.whl"
Tff7b72"bleak-*-py3-none-any.whl"
Tff7b72)
Tff7b72missing=0
Tff7b72for pattern in "${required[@]}"; do
Tff7b72if ! ls android/vendor/${pattern} >/dev/null 2>&1; then
Tff7b72echo "::error::Missing wheel matching android/vendor/${pattern}"
Tff7b72missing=1
Tff7b72fi
Tff7b72done
Tff7b72if [[ "${missing}" -ne 0 ]]; then
Tff7b72echo "Built wheels:"
Tff7b72ls -la android/vendor/ || true
Tff7b72exit 1
Tff7b72fi
Tff7b72echo "All required Android wheels present:"
Tff7b72ls -1 android/vendor/

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffRunTa5d6ff Ta5d6ffunitTa5d6ff Ta5d6fftests
Tff7b72ifTb4b4b4: Ta5d6ff${{Ta5d6ff Ta5d6ffinputs.run_unit_testsTa5d6ff Ta5d6ff}}
Tff7b72working-directoryTb4b4b4: Ta5d6ffandroid
Tff7b72runTb4b4b4: Tb4b4b4|
Tff7b72chmod +x gradlew
Tff7b72./gradlew --no-daemon :app:testDebugUnitTest

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffRunTa5d6ff Ta5d6ffAndroidTa5d6ff Ta5d6ffLint
Tff7b72ifTb4b4b4: Ta5d6ff${{Ta5d6ff Ta5d6ffinputs.run_unit_testsTa5d6ff Ta5d6ff}}
Tff7b72working-directoryTb4b4b4: Ta5d6ffandroid
Tff7b72runTb4b4b4: Tb4b4b4|
Tff7b72chmod +x gradlew
Tff7b72./gradlew --no-daemon :app:lintDebug

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffBuildTa5d6ff Ta5d6ffdebugTa5d6ff Ta5d6ffAPK
Tff7b72ifTb4b4b4: Ta5d6ff${{Ta5d6ff Ta5d6ffsteps.track.outputs.trackTa5d6ff Ta5d6ff!=Ta5d6ff Ta5d6ff'master'Ta5d6ff Ta5d6ff}}
Tff7b72working-directoryTb4b4b4: Ta5d6ffandroid
Tff7b72runTb4b4b4: Tb4b4b4|
Tff7b72chmod +x gradlew
Tff7b72./gradlew --no-daemon :app:assembleDebug

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffBuildTa5d6ff Ta5d6ffreleaseTa5d6ff Ta5d6ffAPK
Tff7b72ifTb4b4b4: Ta5d6ff${{Ta5d6ff Ta5d6ffsteps.track.outputs.trackTa5d6ff Ta5d6ff==Ta5d6ff Ta5d6ff'master'Ta5d6ff Ta5d6ff}}
Tff7b72working-directoryTb4b4b4: Ta5d6ffandroid
Tff7b72runTb4b4b4: Tb4b4b4|
Tff7b72chmod +x gradlew
Tff7b72./gradlew --no-daemon :app:assembleRelease

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffSignTa5d6ff Ta5d6ffreleaseTa5d6ff Ta5d6ffAPKs
Tff7b72ifTb4b4b4: Ta5d6ff${{Ta5d6ff Ta5d6ffsteps.track.outputs.trackTa5d6ff Ta5d6ff==Ta5d6ff Ta5d6ff'master'Ta5d6ff Ta5d6ff&&Ta5d6ff Ta5d6ffsteps.android_signing.outputs.readyTa5d6ff Ta5d6ff==Ta5d6ff Ta5d6ff'true'Ta5d6ff Ta5d6ff}}
Tff7b72envTb4b4b4:
Tff7b72KS_B64Tb4b4b4: Ta5d6ff${{Ta5d6ff Ta5d6ffsecrets.ANDROID_SIGNING_KEYSTORE_BASE64Ta5d6ff Ta5d6ff}}
Tff7b72SIGNING_KEYSTORE_PATHTb4b4b4: Ta5d6ff${{Ta5d6ff Ta5d6ffrunner.tempTa5d6ff Ta5d6ff}}/meshchatx-release.jks
Tff7b72SIGNING_KEY_ALIASTb4b4b4: Ta5d6ff${{Ta5d6ff Ta5d6ffsecrets.ANDROID_SIGNING_KEY_ALIASTa5d6ff Ta5d6ff}}
Tff7b72SIGNING_KEYSTORE_PASSWORDTb4b4b4: Ta5d6ff${{Ta5d6ff Ta5d6ffsecrets.ANDROID_SIGNING_KEYSTORE_PASSWORDTa5d6ff Ta5d6ff}}
Tff7b72SIGNING_KEY_PASSWORDTb4b4b4: Ta5d6ff${{Ta5d6ff Ta5d6ffsecrets.ANDROID_SIGNING_KEY_PASSWORDTa5d6ff Ta5d6ff}}
Tff7b72runTb4b4b4: Tb4b4b4|
Tff7b72set -euo pipefail
Tff7b72printf '%s' "${KS_B64}" | base64 -d > "${SIGNING_KEYSTORE_PATH}"
Tff7b72export SIGNING_KEYSTORE_PATH SIGNING_KEY_ALIAS SIGNING_KEYSTORE_PASSWORD
Tff7b72export SIGNING_KEY_PASSWORD="${SIGNING_KEY_PASSWORD:-${SIGNING_KEYSTORE_PASSWORD}}"
Tff7b72bash scripts/sign-android-apks.sh

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffUploadTa5d6ff Ta5d6ffwheels
Tff7b72usesTb4b4b4: Ta5d6ffactions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4
Tff7b72withTb4b4b4:
Tff7b72nameTb4b4b4: Ta5d6ffandroid-wheels-${{Ta5d6ff Ta5d6ffgithub.ref_nameTa5d6ff Ta5d6ff}}-${{Ta5d6ff Ta5d6ffgithub.run_idTa5d6ff Ta5d6ff}}
Tff7b72pathTb4b4b4: Ta5d6ffandroid/vendor/*.whl
Tff7b72if-no-files-foundTb4b4b4: Ta5d6fferror

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffUploadTa5d6ff Ta5d6ffdebugTa5d6ff Ta5d6ffAPK
Tff7b72ifTb4b4b4: Ta5d6ff${{Ta5d6ff Ta5d6ffsteps.track.outputs.trackTa5d6ff Ta5d6ff!=Ta5d6ff Ta5d6ff'master'Ta5d6ff Ta5d6ff}}
Tff7b72usesTb4b4b4: Ta5d6ffactions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4
Tff7b72withTb4b4b4:
Tff7b72nameTb4b4b4: Ta5d6ffmeshchatx-android-debug-${{Ta5d6ff Ta5d6ffgithub.ref_nameTa5d6ff Ta5d6ff}}-${{Ta5d6ff Ta5d6ffgithub.run_idTa5d6ff Ta5d6ff}}
Tff7b72pathTb4b4b4: Ta5d6ffandroid/app/build/outputs/apk/debug/*.apk
Tff7b72if-no-files-foundTb4b4b4: Ta5d6fferror

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffUploadTa5d6ff Ta5d6fftestTa5d6ff Ta5d6ffreports
Tff7b72ifTb4b4b4: Ta5d6ff${{Ta5d6ff Ta5d6ffinputs.run_unit_testsTa5d6ff Ta5d6ff}}
Tff7b72usesTb4b4b4: Ta5d6ffactions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4
Tff7b72withTb4b4b4:
Tff7b72nameTb4b4b4: Ta5d6ffmeshchatx-android-tests-${{Ta5d6ff Ta5d6ffgithub.ref_nameTa5d6ff Ta5d6ff}}-${{Ta5d6ff Ta5d6ffgithub.run_idTa5d6ff Ta5d6ff}}
Tff7b72pathTb4b4b4: Tb4b4b4|
Tff7b72android/app/build/reports/tests/
Tff7b72android/app/build/test-results/
Tff7b72android/app/build/reports/lint-results-debug.html
Tff7b72android/app/build/reports/lint-results-debug.xml
Tff7b72if-no-files-foundTb4b4b4: Ta5d6ffwarn

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffUploadTa5d6ff Ta5d6ffreleaseTa5d6ff Ta5d6ffAPK
Tff7b72ifTb4b4b4: Ta5d6ff${{Ta5d6ff Ta5d6ffsteps.track.outputs.trackTa5d6ff Ta5d6ff==Ta5d6ff Ta5d6ff'master'Ta5d6ff Ta5d6ff}}
Tff7b72usesTb4b4b4: Ta5d6ffactions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4
Tff7b72withTb4b4b4:
Tff7b72nameTb4b4b4: Ta5d6ffmeshchatx-android-release-${{Ta5d6ff Ta5d6ffgithub.ref_nameTa5d6ff Ta5d6ff}}-${{Ta5d6ff Ta5d6ffgithub.run_idTa5d6ff Ta5d6ff}}
Tff7b72pathTb4b4b4: Ta5d6ffandroid/app/build/outputs/apk/release/*.apk
Tff7b72if-no-files-foundTb4b4b4: Ta5d6fferror

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffStageTa5d6ff Ta5d6ffAPKsTa5d6ff Ta5d6ffforTa5d6ff Ta5d6ffunifiedTa5d6ff Ta5d6ffdraftTa5d6ff Ta5d6ffrelease
Tff7b72ifTb4b4b4: Ta5d6ff${{Ta5d6ff Ta5d6ffsteps.track.outputs.trackTa5d6ff Ta5d6ff==Ta5d6ff Ta5d6ff'dev'Ta5d6ff Ta5d6ff||Ta5d6ff Ta5d6ffsteps.track.outputs.trackTa5d6ff Ta5d6ff==Ta5d6ff Ta5d6ff'master'Ta5d6ff Ta5d6ff}}
Tff7b72runTb4b4b4: Tb4b4b4|
Tff7b72set -euo pipefail
Tff7b72mkdir -p android-apks-for-draft
Tff7b72if [[ "${{ steps.track.outputs.track }}" == "dev" ]]; then
Tff7b72cp -v android/app/build/outputs/apk/debug/*.apk android-apks-for-draft/
Tff7b72else
Tff7b72shopt -s nullglob
Tff7b72signed=(android/app/build/outputs/apk/release/*-signed.apk)
Tff7b72shopt -u nullglob
Tff7b72if [[ ${#signed[@]} -eq 0 ]]; then
Tff7b72echo "::error::Expected *-signed.apk under android/app/build/outputs/apk/release/" >&2
Tff7b72exit 1
Tff7b72fi
Tff7b72cp -v "${signed[@]}" android-apks-for-draft/
Tff7b72fi

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffUploadTa5d6ff Ta5d6ffAndroidTa5d6ff Ta5d6ffAPKTa5d6ff Ta5d6ffbundleTa5d6ff Ta5d6ffforTa5d6ff Ta5d6ffdraft
Tff7b72ifTb4b4b4: Ta5d6ff${{Ta5d6ff Ta5d6ffsteps.track.outputs.trackTa5d6ff Ta5d6ff==Ta5d6ff Ta5d6ff'dev'Ta5d6ff Ta5d6ff||Ta5d6ff Ta5d6ffsteps.track.outputs.trackTa5d6ff Ta5d6ff==Ta5d6ff Ta5d6ff'master'Ta5d6ff Ta5d6ff}}
Tff7b72usesTb4b4b4: Ta5d6ffactions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4
Tff7b72withTb4b4b4:
Tff7b72nameTb4b4b4: Ta5d6ffmeshchatx-android-apks-${{Ta5d6ff Ta5d6ffgithub.ref_nameTa5d6ff Ta5d6ff}}-${{Ta5d6ff Ta5d6ffgithub.run_idTa5d6ff Ta5d6ff}}
Tff7b72pathTb4b4b4: Ta5d6ffandroid-apks-for-draft/*.apk
Tff7b72if-no-files-foundTb4b4b4: Ta5d6fferror


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────